﻿//Created by Action Script Viewer - http://www.buraks.com/asv
package de.polygonal.ds.sort {
    import de.polygonal.ds.*;

    public function sLinkedMergeSort(_arg1:SListNode, _arg2:Boolean=false):SListNode{
        var _local4:SListNode;
        var _local5:SListNode;
        var _local6:SListNode;
        var _local7:SListNode;
        var _local9:int;
        var _local10:int;
        var _local11:int;
        var _local12:int;
        if (!_arg1){
            return (null);
        };
        var _local3:SListNode = _arg1;
        var _local8 = 1;
        if (_arg2){
            while (true) {
                _local4 = _local3;
                _local7 = null;
                _local3 = _local7;
                _local9 = 0;
                while (_local4) {
                    _local9++;
                    _local12 = 0;
                    _local10 = 0;
                    _local5 = _local4;
                    while (_local12 < _local8) {
                        _local10++;
                        _local5 = _local5.next;
                        if (!_local5){
                            break;
                        };
                        _local12++;
                    };
                    _local11 = _local8;
                    while ((((_local10 > 0)) || ((((_local11 > 0)) && (_local5))))) {
                        if (_local10 == 0){
                            _local6 = _local5;
                            _local5 = _local5.next;
                            _local11--;
                        } else {
                            if ((((_local11 == 0)) || (!(_local5)))){
                                _local6 = _local4;
                                _local4 = _local4.next;
                                _local10--;
                            } else {
                                if ((_local4.data - _local5.data) >= 0){
                                    _local6 = _local4;
                                    _local4 = _local4.next;
                                    _local10--;
                                } else {
                                    _local6 = _local5;
                                    _local5 = _local5.next;
                                    _local11--;
                                };
                            };
                        };
                        if (_local7){
                            _local7.next = _local6;
                        } else {
                            _local3 = _local6;
                        };
                        _local7 = _local6;
                    };
                    _local4 = _local5;
                };
                _local7.next = null;
                if (_local9 <= 1){
                    return (_local3);
                };
                _local8 = (_local8 << 1);
            };
        };
        _local4 = _local3;
        _local7 = null;
        _local3 = _local7;
        _local9 = 0;
        while (_local4) {
            _local9++;
            _local12 = 0;
            _local10 = 0;
            _local5 = _local4;
            while (_local12 < _local8) {
                _local10++;
                _local5 = _local5.next;
                if (!_local5){
                    break;
                };
                _local12++;
            };
            _local11 = _local8;
            while ((((_local10 > 0)) || ((((_local11 > 0)) && (_local5))))) {
                if (_local10 == 0){
                    _local6 = _local5;
                    _local5 = _local5.next;
                    _local11--;
                } else {
                    if ((((_local11 == 0)) || (!(_local5)))){
                        _local6 = _local4;
                        _local4 = _local4.next;
                        _local10--;
                    } else {
                        if ((_local4.data - _local5.data) <= 0){
                            _local6 = _local4;
                            _local4 = _local4.next;
                            _local10--;
                        } else {
                            _local6 = _local5;
                            _local5 = _local5.next;
                            _local11--;
                        };
                    };
                };
                if (_local7){
                    _local7.next = _local6;
                } else {
                    _local3 = _local6;
                };
                _local7 = _local6;
            };
            _local4 = _local5;
        };
        _local7.next = null;
        if (_local9 <= 1){
            return (_local3);
        };
        _local8 = (_local8 << 1);
        //unresolved jump
    }
}//package de.polygonal.ds.sort 
